/*
 * Description: error code.
 */

#ifndef ERROR_H
#define ERROR_H

/*
错误码值均小于等于0，其绝对值为32位比特长度，定义如下：
+--------+--------+---------------+
| module |severity|     code      |
+--------+--------+---------------+
module   - 8比特，为模块类型
           0x00 - 预留，与具体业务模块无关的通用返回码
           0x01 - Winbox
           0x02 - VMAssistant
           0x03 - VMAgent
           0x04 - ConnectMgr
           0x05 - UsbDeviceMgr
           0x06 - QmpLink
           0x07 - Snapshot
           0x08 - VMSleep
           0x09 - VMNet
           0x10 - SharedFolder
           0x14 - ExpandCapacity
severity - 8比特，为错误等级，预留未使用，填充0x00即可
code     - 16比特，具体错误码
*/

namespace COMMON {
enum ErrorCode {
    /* 与模块无关通用返回码，范围为[-0x0000FFFF, 0x00000000] */
    DEFAULT_ERROR = -1,                             // 未指定的失败，如调用系统函数失败情况默认返回值
    OK = 0,                                         // 成功
    ERROR_EPOLL_WAIT = 17,                          // 客户端启动失败返回错误码
    INVALID_PARAMETER = -0x0000FFFF,                // 参数无效
    NULL_PTR,                                       // 空指针
    INVALID_FILE_PATH,                              // 文件地址无效
    FILE_NOT_EXIST,                                 // 文件不存在
    FILE_ACCESS_FAILED,                             // 文件访问失败
    CMD_EXEC_FAILED,                                // 系统函数执行失败
    COPY_FAILED,                                    // 拷贝文件失败
    INVALID_IMAGE = 666,                            // 非windows on arm镜像
    SHARED_FOLD_ERROR_1 = -0x0000FF11,              // 设置共享目录失败-启动授权
    SHARED_FOLD_ERROR_2 = -0x0000FF12,              // 设置节点挂载失败-启动授权
    SHARED_FOLD_ERROR_3 = -0x0000FF13,              // 取消节点挂载失败-更改目录(未启用)
    SHARED_FOLD_ERROR_4 = -0x0000FF14,              // 重设共享目录失败-更改目录
    SHARED_FOLD_ERROR_5 = -0x0000FF15,              // 重设节点挂载失败-更改目录
    SHARED_FOLD_ERROR_6 = -0x0000FF16,              // 取消节点挂载失败-取消授权(未启用)

    /* Winbox模块返回码，范围为[-0x0100FFFF, -0x01000000] */
    KVM_DISABLED = -0x0100FFFF,                     // kvm未使能
    KERNEL_MISMATCH,                                // 内核版本不匹配
    INVALID_CPU_NUM,                                // 配置的cpu核数无效
    INVALID_MEMORY_SIZE,                            // 配置的内存大小无效
    INVALID_DISK_SIZE,                              // 配置的磁盘大小无效
    CREATE_DISK_FAILED,                             // 创建磁盘失败
    CONVERT_DISK_FAILED,                            // 转换磁盘失败
    PATH_CONTAIN_UNSUPPORTED_SYMBOL,                // ISO镜像所在路劲包含不支持字符
    DISK_IN_USED,                                   // 磁盘被占用
    DISK_DAMAGED,                                   // 磁盘损坏
    DISK_UNKNOWN_ERROR,                             // 磁盘其他未知位错（被占用或损坏以外）
    COPY_DRIVER_FAILED,                             // 拷贝驱动文件失败
    COPY_EXE_FAILED,                                // 拷贝exe文件失败
    GENERATE_TEMP_FAILED,                           // 生成Temp临时文件夹失败
    GENERATE_UNATTEND_XML_FAILED,                   // 生成windows应答文件失败
    GENERATE_SETUP_BAT_FAIL,                        // 生成安装完成启动脚本失败
    GENERATE_START_BAT_FAIL,                        // 生成开机自启动脚本失败
    MAKE_UNATTENDED_ISO_FAILED,                     // 制作应答文件iso失败
    DEVICEID_INFO_MISSING,                          // 虚拟机的设备信息丢失
    GENERATE_DEVICEID_FAILED,                       // 生成设备信息失败
    NOT_SUPPORT_VM_MULTI_INSTANCE,                  // 不允许多个虚拟机同时运行
    RAM_MEMORY_IS_NOT_ENOUGH,                       // 内存不足（小于4GB）导致虚拟机安装失败
    SHARED_FOLDER_PERMISSION_ERROR,                 // 共享文件夹权限错误
    DISK_SPACE_IS_NOT_ENOUGH,                       // 磁盘空间不足以启动虚拟机
    LOAD_SYSTEM_ADAPTER_LIBRARY_FAILED,             // 加载系统适配层动态库失败
    VM_STATE_INCORRECT,                             // 虚拟机状态有误
    VM_NOT_EXIST,                                   // 虚拟机不存在
    GUEST_IS_LOCKED,                                // 虚拟机已锁定
    GUEST_IS_LOGOFF,                                // 虚拟机已注销

    /* connect manager模块返回码，范围为[-0x0400FFFF, -0x04000000] */
    SOCKET_SERVER_INITED = -0x0400FFFF,             // 服务已经初始化
    CREATE_SERVER_FAILED,                           // 初始化服务失败
    INIT_MSGSOCK_FAILED,                            // 初始化msgSock eventMgr异常
    MSGSOCK_CREATE_FAILED,                          // 初始化msgSockc错误
    EVENTMGR_CREATE_FAILED,                         // 初始化eventMgr错误
    ADD_EVENT_FAILED,                               // AddEvent失败
    STREAM_READ_FAILED,                             // 读取流失败
    STREAM_WRITE_FAILED,                            // 写数据失败
    INVALID_MESSAGE_SIZE,                           // 无效的数据大小
    INVALID_MESSAGE_MSGSOCK,                        // 无效的msgSock对象
    MSGSOCK_SEND_FAILED,                            // 发送数据错误
    READ_BUFFER_FAILED,                             // 读取数据错误
    CHECK_SUM_ERROR,                                // 解析数据大小错误
    MSGSOCK_RECV_ERROR,                             // 接收数据错误
    RECONNECT_SERVER_ERROR,                         // 重连服务失败
    INVALID_PROTO_RESULT,                           // 无效的proto数据
    CREATE_CHANNLE_FAILED,                          // 创建通道失败
    SOCKET_CONNECT_FAILED,                          // socket连接失败
    SOCKET_ADDRESS_ERROR,                           // socket 地址错误
    SOCKET_INIT_FAILED,                             // socket初始化失败
    SOCKET_BIND_FAILED,                             // socket bind失败
    SOCKET_LISTEN_FAILED,                           // socket 监听失败
    SOCKET_PORT_ERROR,                              // socket 端口错误
    SOCKET_FD_ERROR,                                // socket fd错误
    INVALID_MSGSOCK_BUFFER,                         // 无效的socket buffer
    EVENT_FD_ERROR,                                 // event fd错误
    EPOLL_CREATE_ERROR,                             // epoll 初始化失败
    EVENT_DATA_INIT_ERROR,                          // eventdata初始化错误
    EPOLL_CTL_ERROR,                                // epoll ctl错误

    /* QmpLink模块返回码，范围为[-0x0600FFFF, -0x06000000] */
    QMP_SOCKET_PATH_INVALID = -0x0600FFFF,          // qmp socket地址无效
    QMP_SOCKET_PATH_COPY_FAILED,                    // qmp socket地址拷贝失败
    QMP_SOCKET_CREATE_FAILED,                       // qmp socket创建失败
    QMP_SOCKET_CONNECT_FAILED,                      // qmp socket连接失败
    QMP_SOCKET_WRITE_FAILED,                        // qmp socket写失败
    QMP_SOCKET_READ_FAILED,                         // qmp socket读失败
    QMP_RESPONSE_PARSE_FAILED,                      // qmp回应解析失败
    QMP_RESPONSE_CONTAIN_ERROR,                     // qmp回应失败

    /* Snapshot模块返回码，范围为[-0x0700FFFF, -0x07000000] */
    SNAPSHOT_NAME_IS_EMPTY = -0x0700FFFF,           // 快照名字为空
    SNAPSHOT_NAME_IS_EXIST,                         // 快照名字已经存在
    SNAPSHOT_NAME_IS_NOT_EXIST,                     // 快照名字不存在
    ADD_STATIC_SNAPSHOT_FAILED,                     // 添加静态快照失败
    CANNOT_ADD_DYNAMIC_SNAPSHOT,                    // 虚拟机正在运行时无法添加快照
    DELETE_STATIC_SNAPSHOT_FAILED,                  // 删除静态快照失败
    CANNOT_DELETE_DYNAMIC_SNAPSHOT,                 // 虚拟机正在运行时无法删除快照
    RECOVERY_STATIC_SNAPSHOT_FAILED,                // 恢复静态快照失败
    CANNOT_RECOVERY_DYNAMIC_SNAPSHOT,               // 虚拟机正在运行时无法恢复快照
    RENAME_STATIC_SNAPSHOT_FAILED,                  // 静态修改快照名称失败
    CANNOT_RENAME_DYNAMIC_SNAPSHOT,                 // 虚拟机正在运行时无法修改快照名称
    STATIC_QUERY_SNAPSHOT_FAILED,                   // 静态查询快照失败
    DYNAMIC_QUERY_SNAPSHOT_FAILED,                  // 动态查询快照失败
    CANNOT_OPERATE_WHEN_SNAPSHOTTING,               // 快照运行中无法进行操作
    CANNOT_OPERATE_WHEN_VMSTATE_ERROR,              // 虚拟机状态异常无法进行操作
    SNAPSHOT_NUM_REACH_LIMIT,                       // 快照数量已经达到上限
    SNAPSHOT_NAME_IS_INVALID,                       // 快照名字含有无效字符
    SNAPSHOT_NAME_LENGTH_IS_INVALID,                // 快照名字长度不符要求
    ADD_SNAPSHOT_OUT_OF_DISK_SPACE,                 // 创建快照磁盘空间不足

    /* VMSleep模块返回码，范围为[-0x0800FFFF, -0x08000000] */
    STOP_VM_QMP_CONNECT_FAILED = -0x0800FFFF,       // 休眠场景停止虚拟机但qmp连接失败
    STOP_VM_CMD_EXEC_FAILED,                        // 休眠场景停止虚拟机qmp命令执行失败
    CONTINUE_VM_QMP_CONNECT_FAILED,                 // 唤醒场景继续运行虚拟机但qmp连接失败
    CONTINUE_VM_CMD_EXEC_FAILED,                    // 唤醒场景继续运行虚拟机qmp命令执行失败

    /* VMNet模块返回码，范围为[-0x0900FFFF, -0x09000000] */
    NET_RES_FILE_ACCESS_FAILED = -0x0900FFFF,       // 网络资源文件无法访问
    NET_RES_UPDATE_FAILED,                          // 网络资源更新失败
    NET_JSON_FILE_READ_FAILED,                      // Json文件读取失败
    NET_RES_NUM_INVALID,                            // 网络资源数无效
    NET_RES_UPDATE_TYPE_INVALID,                    // 网络资源数更新类型错误
    NET_DAEMON_PARAM_NUM_INVALID,                   // 守护进程程序参数个数错误
    NET_DAEMON_PARAM_VAL_INVALID,                   // 守护进程程序参数值无效
    NET_DAEMON_FORK_PID_FAILED,                     // 创建子进程失败
    NET_MONITOR_INOTIFY_INIT_FAILED,                // 网络监听初始化失败
    NET_MONITOR_INOTIFY_ADD_WATCH_FAILED,           // 网络监听添加观测失败
    NET_MONITOR_PATH_CREATE_FAILED,                 // 网络监听路径创建失败
    NET_MONITOR_PATH_CHMOD_FAILED,                  // 网络监听路径更改权限失败
    NET_GET_USER_INFO_FAILED,                       // 用户获取网络配置失败
    NET_RES_TAG_NAME_INVALID,                       // 用户申请网络资源时tag文件名无效
    NET_RES_TAG_CREATE_FAILED,                      // 用户申请网络资源时无法创建tag文件
    NET_SAMBA_GET_USER_NAME_FAILED,                 // Samba创建工作路径前获取用户名失败
    NET_SAMBA_GET_PORT_FAILED,                      // 生成smb.conf时获取不到端口信息
    NET_SAMBA_GET_IP_FAILED,                        // 生成smb.conf时获取不到ip地址信息
    NET_SAMBA_CREATE_WORK_DIR_FAILED,               // Samba创建工作路径失败
    NET_SAMBA_WORK_DIR_OPEN_FAILED,                 // Samba工作路径无法打开
    NET_IP_CONFLICT,                                // Host现有IP地址与网桥DTAppEngineBr地址冲突
    NET_RESOURCE_CONFIG_FAILED,                     // 网络资源配置异常

    /* share folder模块返回码，范围为[-0x0A00FFFF, -0x0A000000] */
    SHARED_NAME_IS_EMPTY = -0x0A00FFFF,
    SHARED_NAME_INVALID,
    SHARED_NAME_IS_EXIST,
    SHARED_NAME_NOT_EXIST,
    SHARED_PATH_IS_EMPTY,
    SHARED_PATH_IS_EXIST,
    SHARED_PATH_NOT_EXIST,
    SHARED_PATH_HAS_INVALID_CHAR,
    SHARED_PATH_IS_PRIVATE_PATH,
    SHARED_PATH_NOT_AUTHORIZED,
    SHARED_PATH_NOT_ALLOWED,
    SHARED_GUEST_ERROR,
    SHARED_UNKNOWN_ERROR,

    /* additions_link模块返回码，范围为[-0x0B00FFFF, -0x0B000000] */
    ADDITIONS_INVALID_ARGS = -0x0B00FFFF,
    ADDITIONS_NOT_CONNECTED,
    ADDITIONS_SEND_FAILED,
    ADDITIONS_RECV_FAILED,
    ADDITIONS_HEAD_INVALID,
    ADDITIONS_SEND_TIME_OUT,
    ADDITIONS_RECV_TIME_OUT,
    ADDITIONS_SERIAL_CHANNELS_INVALID,
    ADDITIONS_UNKNOWN_ERROR,

    /* cdrom模块返回码，范围为[-0x0C00FFFF, -0x0C000000] */
    CDDrive_NOT_EXIST = -0x0C00FFFF,
    CDDrive_NOT_CONNECTED,
    CDDrive_CMD_CONTAINS_ERR,
    CDDrive_CMD_EXECUTE_FAILED,
    CDDrive_OVER_LIMIT,
    CDDrive_INVALID_FILE,
    CDDrive_UNKNOWN_ERROR,

    /* USB模块返回码，范围为[-0x0D00FFFF, -0x0D000000] */
    USB_DEIVCE_ID_IS_EMPTY = -0x0D00FFFF,           // 挂载设备，device id为空
    USB_DEIVCE_ID_EXISTED,                          // 挂载设备，device id已存在
    USB_DEVICE_NO_AVAILABLE_PORT,                   // 挂载设备，没有可用的端口
    USB_DEVICE_NO_AVAILABLE_LETTER,                 // 挂载设备，没有可用盘符
    USB_DEVICE_NOT_SUPPORT,                         // 挂载设备，不支持的设备（摄像头、音频、HUB）
    USB_DEVICE_REALIZE_FAILED,                      // 挂载失败，具体原因查看vmlog
    USB_DEVICE_ID_NOT_FOUND,                        // 卸载设备，device id不存在
    USB_UNKNOWN_ERROR,                              // 其他异常，如xhci不存在等

    /* disketles模块返回码，范围为[-0x0E00FFFF, -0x0E000000] */
    EXPANDING_CAPACITY_ERROR = -0x0E00FFFF,         // 虚拟机状态异常无法进行操作
    EXPANDING_CAPACITY_OUT_OF_DISK_SPACE,           // 扩容磁盘空间不足
    EXPANDING_CAPACITY_FAILED,                      // 进行扩容操作失败
    EXPANDING_FILEPATH_IS_EMPTY,                    // 扩容文件路径为空
    CAPACITY_INFO_ERROR,                            // 查询当前容量失败

    /* Developer Scenario模块返回码，范围为[-0x0F00FFFF, -0x0F000000] */
    DEVELOPER_SCENARIO_STOP_VM_ERROR = -0x0F00FFFF, // 停止虚拟机失败
};
}
#endif